#ifndef HERO_SETTING_HH
#define HERO_SETTING_HH

#include <string>
#include <vector>

namespace hero_settings {
    //Jester
    namespace Jester{
        inline static std::string name = "Jester";
        inline static std::string description = "A man who can reduse teammates' stress. Very high speed, Less health.";
        inline static unsigned maxHealth = 35;
        inline static unsigned min_attack = 7;
        inline static unsigned max_attack = 13;
        inline static unsigned speed = 9;
        inline static unsigned dodge = 35;//闪避
        inline static unsigned blight = 40;//毒抗
        inline static unsigned bleed = 30;//血抗
        inline static unsigned stun = 20;//晕抗
        inline static unsigned deathBlow = 67;//死抗
        inline static unsigned trap =	80;//拆陷阱概率
        inline static unsigned crit = 8;//暴击率
        namespace skill {
            //Dirk_Stab
            namespace Dirk_Stab {
                inline static std::string name = "Dirk Stab";
                inline static std::string description = "Dirk Stab, Target:[x x x o], Damage";
                inline static std::vector<int> Rank = {0,1,2,3};
                inline static std::vector<unsigned> Target = {0,1,2};
                inline static unsigned damage_times = 1;
                inline static int self_crit = 9;
            }
            //Harvest (群体攻击)
            namespace Harvest {
                inline static std::vector<int> Rank = {1,2};
                inline static std::vector<unsigned> Target = {1,2};
                inline static unsigned damage_times = 50;
                inline static int self_crit = 4;
                inline static int bleed = 140;
                inline static int bleed_damage = 4;
                inline static int bleed_rounds = 3;

            }
            //Slice_Off
            namespace Slice_Off {
                inline static std::vector<int> Rank = {1,2};
                inline static std::vector<unsigned> Target = {1,2};
                inline static unsigned damage_times = 67;
                inline static int self_crit = 12;
                inline static int bleed = 140;
                inline static int bleed_damage = 5;
                inline static int bleed_rounds = 3;
            }
            //给自己队伍减压
            namespace Inspiring_Tune {
                inline static std::string name = "Inspiring Tune";
                inline static std::string description = "Wicked Slice, Target:[x x x x](teammates), Reduce stress";
                inline static std::vector<int> Rank = {1,2};
                inline static std::vector<unsigned> Target= {0,1,2,3};
                inline static unsigned Stress_healing = 12;
            }
        }
    }
    //Crusader(十字军战士)
    namespace Crusader{
        inline static std::string name = "Crusader";
        inline static std::string description = "Tank. Very slow speed, High health, Self healing and reduce teammates' stress.";
        inline static unsigned maxHealth = 61;
        inline static unsigned min_attack = 10;
        inline static unsigned max_attack = 19;
        inline static unsigned speed = 3;
        inline static unsigned dodge = 25;//闪避
        inline static unsigned blight = 30;//毒抗
        inline static unsigned bleed = 30;//血抗
        inline static unsigned stun = 40;//晕抗
        inline static unsigned deathBlow = 67;//死抗
        inline static unsigned trap =	60;//拆陷阱概率
        inline static unsigned crit = 7;//暴击率

        namespace skill {
            //Smite
            namespace Smite {
                inline static std::string description = "Smite, Target:[x x o o], High Damage.";
                inline static std::string name = "Smite";
                inline static std::vector<int> Rank = {0,1};
                inline static std::vector<unsigned> Target = {0,1};
                inline static int self_crit = 4;
                inline static double damage_times = 1;
            }
            //Battle Heal(自己)
            namespace Battle_Heal {
                inline static std::vector<int> Rank = {0,1,2,3};
                inline static std::vector<int> self_team = {0,1,2,3};
                inline static unsigned min_Health_healing = 5;
                inline static unsigned max_Health_healing = 6;
            }
            //Holy Lance
            namespace Holy_Lance {
                inline static std::vector<int> Rank = {2,3};
                inline static std::vector<unsigned> Target = {1,2,3};
                inline static unsigned damage_times = 100;
                inline static int self_crit = 10.5;
                inline static int self_move = 1;
            }
            //Inspiring Cry(自己队伍)
            namespace Inspiring_Cry {
                inline static std::string description = "Inspiring Cry, Target:[x x x x](teammates), Reduce stress.";
                inline static std::string name = "Inspiring Cry";
                inline static std::vector<int> Rank = {0,1,2,3};
                inline static std::vector<unsigned> Target = {0,1,2,3};
                inline static unsigned Stress_healing = 10;
                inline static unsigned touch = 10;
            }
        }
    }
    //Houndmaster猎犬大师
     namespace Houndmaster{
        inline static std::string name = "Houndmaster";
        inline static std::string description = "Back row attacker. High speed, Less health, AOE reduce stress.";
        inline static unsigned maxHealth = 37;
        inline static unsigned min_attack = 7;
        inline static unsigned max_attack = 13;
        inline static unsigned speed = 7;
        inline static unsigned dodge = 30;//闪避
        inline static unsigned blight = 40;//毒抗
        inline static unsigned bleed = 40;//血抗
        inline static unsigned stun = 40;//晕抗
        inline static unsigned deathBlow = 67;//死抗
        inline static unsigned trap =	90;//拆陷阱概率
        inline static unsigned crit = 8;//暴击率

        namespace skill {
            //Hound's Rush
            namespace Hound_Rush {
                inline static std::string description = "Hound's Rush, Target:[o x x x], Damage.";
                inline static std::string name = "Hound's Rush";
                inline static std::vector<int> Rank = {1,2,3};
                inline static std::vector<unsigned> Target = {1,2,3};
                inline static double damage_times = 1.1;
                inline static int self_crit = 9;
                inline static int bleed = 140;
                inline static int bleed_damage = 2;
                inline static int bleed_rounds = 3;
            }
            //Cry Havoc(群体对自己阵营)
            namespace Cry_Havoc {
                inline static std::string description = "Cry Havoc, Target:[x-x-x-x](all teammates), Probably reduce stress.";
                inline static std::string name = "Cry Havoc";
                inline static std::vector<int> Rank = {2,3};
                inline static std::vector<unsigned> Target = {0,1,2,3};
                inline static unsigned stress_present = 74;
                inline static unsigned Stress_healing = 6;

            }
            //Lick Wounds(对自己治疗)
            namespace Lick_Wounds {
                inline static std::vector<int> Rank = {1,2,3};
                inline static unsigned Health_healing = 8;
            }
            //Blackjack
            namespace Blackjack {
                inline static std::vector<int> Rank = {0,1};
                inline static std::vector<int> self_team = {0,1,2};
                inline static unsigned damage_times = 35;
                inline static int self_crit = 9;
                inline static int stun = 140;
                inline static int stun_rounds = 1;
            }
        }
    }
    //Highwayman 
     namespace Highwayman{
        inline static std::string name = "Highwayman";
        inline static std::string description = "All postion attacker. High speed, Normal health.";
        inline static unsigned maxHealth = 43;
        inline static unsigned min_attack = 9;
        inline static unsigned max_attack = 16;
        inline static unsigned speed = 7;
        inline static unsigned dodge = 30;//闪避
        inline static unsigned blight = 30;//毒抗
        inline static unsigned bleed = 30;//血抗
        inline static unsigned stun = 30;//晕抗
        inline static unsigned deathBlow = 67;//死抗
        inline static unsigned trap =	90;//拆陷阱概率
        inline static unsigned crit = 9;//暴击率

        namespace skill {
            //Wicked Slice
            namespace Wicked_Slice {
                inline static std::string description = "Wicked Slice, Target:[x x o o], High Damage.";
                inline static std::string name = "Wicked Slice";
                inline static std::vector<int> Rank = {0,1,2};
                inline static std::vector<unsigned> Target = {0,1};
                inline static double damage_times = 1.15;
                inline static int self_crit = 9;
            }
            //Pistol_Shot
            namespace Pistol_Shot {
                inline static std::vector<int> Rank = {1,2};
                inline static std::vector<unsigned> Target = {1,2};
                inline static unsigned damage_times = 85;
                inline static int self_crit = 11.5;

            }
            //Poinline static int Blank Shot
            // namespace Point_Blank_Shot {
            //     inline static std::vector<int,1> Rank = {0};
            //     inline static std::vector<int,1> Target = {0};
            //     inline static unsigned damage_times = 150;
            //     inline static int self_crit = 9;
            //     inline static int self_move = -1;
            //     inline static int enemy_target = -1;
            // }
            //Poinline static int Blank Shot
            namespace Point_Blank_Shot {
                inline static std::string name = "Poinline static int Blank Shot";
                inline static std::string description = "Poinline static int Blank Shot, Target:[o x x x], Damage.";
                inline static std::vector<int> Rank = {1,2,3};
                inline static std::vector<unsigned> Target = {1,2,3};
                inline static double damage_times = 0.8;
                inline static int self_crit = 9;
                inline static int self_move = 1;
            }
        }
    }
    //Bounty_Hunter
    namespace Bounty_Hunter{
        inline static std::string name = "Bounty Hunter";
        inline static std::string description = "All postion AOE attacker. High speed, Normal health.";
        inline static unsigned maxHealth = 45;
        inline static unsigned min_attack = 8;
        inline static unsigned max_attack = 16;
        inline static unsigned speed = 7;
        inline static unsigned dodge = 25;//闪避
        inline static unsigned blight = 30;//毒抗
        inline static unsigned bleed = 30;//血抗
        inline static unsigned stun = 40;//晕抗
        inline static unsigned deathBlow = 67;//死抗
        inline static unsigned trap =	90;//拆陷阱概率
        inline static unsigned crit = 8;//暴击率

        namespace skill {
            //Collect Bounty
            namespace Collect_Bounty {
                inline static std::string description = "Collect Bounty, Target:[x x o o], High Damage.";
                inline static std::string name = "Collect Bounty";
                inline static std::vector<int> Rank = {0,1,2};
                inline static std::vector<unsigned> Target = {0,1};
                inline static int self_crit = 0;
                inline static double damage_times = 1.25;
            }
            //Come Hither
            namespace Come_Hither {
                inline static std::vector<int> Rank = {0,1,2,3};
                inline static std::vector<unsigned> Target = {2,3};
                inline static unsigned damage_times = 40;
                inline static int self_crit = 4;
                inline static unsigned enemy_target = 2;

            }
            //Uppercut
            namespace Uppercut {
                inline static std::vector<int> Rank = {0,1};
                inline static std::vector<unsigned> Target = {0,1};
                inline static unsigned damage_times = 33;
                inline static int self_crit = 4;
                inline static int stun = 140;
                inline static int stun_rounds = 1;
                inline static unsigned enemy_target = -2;
            }
            //Finish Him
            namespace Finish_Him {
                inline static std::string description = "Finish Him, Target:[x-x-x-x](All enemies), less Damage.";
                inline static std::string name = "Finish Him";
                inline static std::vector<int> Rank = {0,1,2};
                inline static std::vector<unsigned> Target = {0,1,2,3};
                inline static double damage_times = 0.3;
                inline static int self_crit = 9;
            }
        }
    }
    //Leper
    namespace Leper{
        inline static std::string name = "Leper";
        inline static std::string description = "Self-care tank.Low speed, High health, Self healing and reduce stress.";
        inline static unsigned maxHealth = 63;
        inline static unsigned min_attack = 13;
        inline static unsigned max_attack = 26;
        inline static unsigned speed = 4;
        inline static unsigned dodge = 20;//闪避
        inline static unsigned blight = 40;//毒抗
        inline static unsigned bleed = 10;//血抗
        inline static unsigned stun = 60;//晕抗
        inline static unsigned deathBlow = 67;//死抗
        inline static unsigned trap =	60;//拆陷阱概率
        inline static unsigned crit = 5;//暴击率

        namespace skill {
            //Chop
            namespace Chop {
                inline static std::string description = "Chop, Target:[x x o o], High Damage.";
                inline static std::string name = "Chop";
                inline static std::vector<int> Rank = {0,1};
                inline static std::vector<unsigned> Target = {0,1};
                inline static unsigned damage_times = 1;
                inline static int self_crit = 7;
            }
            //Hew(群体)
            namespace Hew {
                inline static std::vector<int> Rank = {0,1};
                inline static std::vector<unsigned> Target = {0,1};
                inline static unsigned damage_times = 50;

            }
            //Solemnity(对自己治疗)
            namespace Solemnity {
                inline static std::string description = "Solemnity, Target:Self, Healing, Reduce stress.";
                inline static std::string name = "Solemnity";
                inline static std::vector<int> Rank = {0,1};
                inline static unsigned Health_healing = 10;
                inline static unsigned stress_healing = 7;
            }
            //Purge(清除负面状态)
            namespace Purge {
                inline static std::vector<int> Rank = {0};
                inline static std::vector<unsigned> Target = {0};
                inline static unsigned damage_times = 60;
                inline static int self_crit = 4;
                inline static int self_move = -3;

            }
        }
    }
    //Vestal
    namespace Vestal{
        inline static std::string name = "Vestal";
        inline static std::string description = "Healing. Normal speed, Normal health.";
        inline static unsigned maxHealth = 44;
        inline static unsigned min_attack = 7;
        inline static unsigned max_attack = 14;
        inline static unsigned speed = 6;
        inline static unsigned dodge = 20;//闪避
        inline static unsigned blight = 30;//毒抗
        inline static unsigned bleed = 40;//血抗
        inline static unsigned stun = 30;//晕抗
        inline static unsigned deathBlow = 67;//死抗
        inline static unsigned trap =	60;//拆陷阱概率
        inline static unsigned crit = 6;//暴击率

        namespace skill {
            //Judgement(造成伤害，自己回复生命)
            namespace Judgement {
                inline static std::string description = "Judgement, Target:[o x x x], Low Damage, Self healing.";
                inline static std::string name = "Judgement";
                inline static std::vector<int> Rank = {2,3};
                inline static std::vector<unsigned> Target = {1,2,3};
                inline static double damage_times = 0.75;
                inline static int self_crit = 9;
                inline static unsigned Health_healing = 5;
            }
            //Dazzling Light
            namespace Dazzling_Light {
                inline static std::vector<int> Rank = {1,2,3};
                inline static std::vector<unsigned> Target = {0,1,2};
                inline static unsigned damage_times = 25;
                inline static int self_crit = 9;
                inline static int stun = 140;
                inline static int stun_rounds = 1;
                inline static unsigned touch = 6;
            }
            //Divine Grace(治疗)
            namespace Divine_Grace{
                inline static std::string description = "Divine Grace, Target:[x x x x](teammates), Healing.";
                inline static std::string name = "Divine Grace";
                inline static std::vector<int> Rank = {2,3};
                inline static std::vector<unsigned> Target = {0,1,2,3};
                inline static unsigned Health_healing = 9;
            }
            //Divine Comfort(群体治疗)
            namespace Divine_Comfort {
                inline static std::vector<int> Rank = {2,3};
                inline static std::vector<int> self_team = {0,1,2,3};
                inline static unsigned Health_healing = 5;
            }
        }
    }
    //Plague Doctor
    namespace Plague_Doctor{
        inline static std::string name = "Plague_Doctor";
        inline static std::string description = "Healing and attack. Very high speed, Low health.";
        inline static unsigned maxHealth = 38;
        inline static unsigned min_attack = 7;
        inline static unsigned max_attack = 13;
        inline static unsigned speed = 9;
        inline static unsigned dodge = 20;//闪避
        inline static unsigned blight = 60;//毒抗
        inline static unsigned bleed = 20;//血抗
        inline static unsigned stun = 20;//晕抗
        inline static unsigned deathBlow = 67;//死抗
        inline static unsigned trap =	70;//拆陷阱概率
        inline static unsigned crit = 6;//暴击率

        namespace skill {
            //Noxious Blast
            namespace Noxious_Blast {
                inline static std::vector<int> Rank = {1,2,3};
                inline static std::vector<unsigned> Target = {0,1};
                inline static unsigned damage_times = 20;
                inline static int self_crit = 9;
                inline static int blight = 140;
                inline static int blight_damage = 7;
                inline static int blight_rounds = 3;
            }
            //Plague Grenade(群体)
            namespace Plague_Grenade {
                inline static std::vector<int> Rank = {2,3};
                inline static std::vector<unsigned> Target = {2,3};
                inline static unsigned damage_times = 10;
                inline static int self_crit = 4;
                inline static int blight = 140;
                inline static int blight_damage = 6;
                inline static int blight_rounds = 3;

            }
            //Battlefield Medicine(治疗,并清除负面状态)
            namespace Battlefield_Medicine {
                inline static std::string description = "Battlefield Medicine, Target:[x x x x](teammates), Healing.";
                inline static std::string name = "Battlefield Medicine";
                inline static std::vector<int> Rank = {2,3};
                inline static std::vector<unsigned> Target = {0,1,2,3};
                inline static unsigned Health_healing = 7;
            }
            //surgery
            namespace surgery {
                inline static std::string description = "Surgery, Target:[x x x o], Damage.";
                inline static std::string name = "Surgery";
                inline static std::vector<int> Rank = {1,2,3};
                inline static std::vector<unsigned> Target = {0,1,2};
                inline static unsigned damage_times = 1;
                inline static int stun = 140;
                inline static int stun_rounds = 1;
                inline static int self_crit = 9;
            }
        }
    }
}

#endif